package lx;

import java.io.File;
import java.util.HashMap;

public class demo7 {

    static HashMap<String, Integer> hm = new HashMap<>();

    public static void main(String[] args) {
         /*
            需求：统计一个文件夹中每种文件的个数并打印。（考虑子文件夹）
            打印格式如下：
            txt:3个
            doc:4个
            jpg:6个
        */
        File file = new File("D:\\Java学习\\aaa");

        HashMap<String, Integer> hm = getCount(file);
        System.out.println(hm);
    }

    /*
     * 作用：
     *       统计一个文件夹中每种文件的个数
     * 参数：
     *       要统计的那个文件夹
     * 返回值：
     *       用来统计map集合
     *       键：后缀名 值：次数

     */
    private static HashMap<String, Integer> getCount(File src) {
        //进入src文件夹
        File[] files = src.listFiles();
        //循环遍历每一个文件
        for (File file : files) {
            //file代表的就是每一个文件
            //判断，如果是文件，统计
            if (file.isFile()) {
                //先获取每一个文件名
                String name = file.getName();
                //再获取每一个文件的后缀
                String[] arr = name.split("\\.");
                //这里的arr.length就是以.为分割，文件的长度，如1.txt的就是 1和txt，数组长度为2
                //为3的就是 1.txt.obj ---1 和txt 和obj
                if (arr.length >= 2) {
                    //获取结尾的后缀
                    String endName = arr[arr.length - 1];
                    //在hm集合里查看这个后缀有吗
                    if (hm.containsKey(endName)) {
                        //存在count++
                        //通过键获取值 也就是通过后缀名来计算出改文件有多少个
                        int count = hm.get(endName);
                        //最后把改文件以及次数添加在hm集合当中
                        hm.put(endName, count + 1);
                    } else {
                        //不存在count为1
                        //说明改文件的次数就一个,直接添加在集合当中即可
                        hm.put(endName, 1);
                    }
                }
            } else {
                //如果不是文件,是文件夹,则递归
                //用来统计子文件夹的文件个数
                //递归来累计子文件夹里的文件个数最后添加在hm集合当中
                //细节：再次调用本方法的时候，参数一定要是src的次一级路径
                getCount(file);

            }
        }
        return hm;
    }
}
